SQLAlchemy

Version: 1.1 기준

Connection

  1. engine 생성
  2. connection/session 생성
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql://user:pass@host")
Session = sessionmaker(bind=engine)
session = Session()
try:
    session.add(MyModelObject)
    session.commit()
except:
    session.rollback()
    raise
finally:
    session.close()

Connection String

engine은 DBMS에 따라 조금씩 다르다.

MySQL

doc

  • MySQL-Python 등 많으니깐...
  • mysql://user:password@host

Oracle

doc

  • cx-Oracle 사용: Anaconda에서는 conda install cx_oracle
  • oracle+cx_oracle://user:password@host/SIDNAME

Connection

Session을 이용해서 ORM으로 사용할 수도 있고, ORM이 아닌 DBAPI(예전 방식)로도 사용이 가능하다.

connection = engine.raw_connection()
try:
    cursor = connection.cursor()
    cursor.callproc("my_procedure", ['x', 'y', 'z'])
    results = list(cursor.fetchall())
    cursor.close()
    connection.commit()
finally:
    connection.close()

테이블 생성

모든 model 테이블을 생성하는 방법과 하나의 테이블만 선택적으로 생성하는 방법이 있다. 생성하려는 테이블의 클래스가 모두 Base를 상속받는다는 전제가 있어야 한다. (Base = declarative_base())

모든 테이블 생성

Base.metadata.create_all(engine)

타겟 테이블만 생성

class MyTable(Base):
    __tablename__ = "my_table"
    ...


mytable = MyTable()
mytable.__table__.create(engine)

results matching ""

    No results matching ""